Práctica desarrollada por Andres J. Sanchez-Fernandez (sfandres@unex.es) y Juan M. Haut (juanmariohaut@unex.es) para la asignatura Sistemas Multimedia de la Universidad de Extremadura.
Fecha de última modificación: 08/03/2023.
| Turno | Tiempo (') | Tarea |
|---|---|---|
| Alumnos | 20 | Acceder al GitHub de la práctica y seguir los pasos para replicar mi repositorio en local y echarlo a andar (hay que seguir el apartado Getting started). |
| Profesor | 60 | Explicar el contenido de este notebook. |
| Alumnos | ∞ | Realizar el ejercicio de clase que se divide en dos partes: crear un entorno de conda desde cero (apartado Working on your own from scratch) y analizar ondas de audio con Python3. |
Los objetivos de esta práctica son los siguientes:
Información consultada para el desarrollo de esta práctica:

Un entorno Conda para Python es un directorio autocontenido que contiene todos los archivos y paquetes necesarios para un proyecto o aplicación Python específica. Te permite instalar y gestionar diferentes versiones de Python y sus dependencias, sin afectar a la instalación global de Python o a otros proyectos en tu sistema.
Conda es un sistema de gestión de paquetes y entornos para cualquier lenguaje de programación. Te permite crear, gestionar y cambiar entre múltiples entornos y compartirlos con otros, lo que facilita la colaboración en proyectos.

JupyterLab y Jupyter Notebook son entornos informáticos interactivos basados en la web que permiten crear y compartir documentos que contienen código, ecuaciones, visualizaciones y texto narrativo.
En resumen, Jupyter Notebook es una herramienta más sencilla y centrada en la computación interactiva, mientras que JupyterLab proporciona una interfaz más versátil y potente para trabajar con múltiples cuadernos y archivos.
Google Colab es un entorno de cuaderno Jupyter. Está construido sobre la infraestructura de Jupyter Notebook y soporta muchas de las mismas características. Además, ofrece varias características únicas, como la posibilidad de utilizar Google Drive para almacenar y acceder a tus cuadernos, así como ejecutar código en la infraestructura en la nube de Google, incluidas las GPUs y TPUs.

Las principales ventajas de Python son:
En definitiva, Python3 y Python en general son lenguajes populares por su sencillez, facilidad de uso y amplia gama de aplicaciones. Con su gran biblioteca estándar y bibliotecas de terceros, Python se puede utilizar para una amplia variedad de tareas y es una gran opción tanto para principiantes como para desarrolladores experimentados.
Esto es una celda y es donde se ejecuta código:
En Python no se le indica el tipo de variable que es:
# int num = 5 # Mal.
num = 5
print(num, type(num))
num = 5.
print(num, type(num))
cad = 'Hola mundo!'
print(cad, type(cad))
5 <class 'int'> 5.0 <class 'float'> Hola mundo! <class 'str'>
En este notebook se utilizan mucho los f-Strings (format string) de Python3:
num = 11
print('Este es mi número favorito:', num) # Cast automático.
print('Este es mi número favorito: ' + str(num)) # Nosotros hacemos cast.
print('Este es mi número favorito: {}'.format(num)) # Forma más interesante.
print(f'Este es mi número favorito: {num}') # Aún más interesante y versátil.
Este es mi número favorito: 11 Este es mi número favorito: 11 Este es mi número favorito: 11 Este es mi número favorito: 11
Nota: Estas no son las únicas librerías de Python con las que se pueden trabajar para el procesamiento de archivos de audio (otro ejemplo podría ser Librosa). Si alguien está familiarizado con otras librerías puede utilizarlas.
Importamos las librerías/módulos específicos de la siguiente forma.
# Importacion.
# import librosa
from scipy.io import wavfile
import IPython
import os
import numpy as np
import matplotlib.pyplot as plt
Aquí definimos los directorios donde guardaremos los audios con los que vamos a trabajar, así como dónde se van a guardar aquellos que generamos a lo largo de la práctica.
# Directorios que usaremos.
cwd = os.getcwd()
audio_input_path = os.path.join(cwd, os.path.join('audio', '_input')) # cambiar '_input' por 'examples'
audio_output_path = os.path.join(cwd, os.path.join('audio', '_output'))
print(f'Directorio con los audios de entrada: {audio_input_path}')
print(f'Directorio donde guardaremos los audios generados: {audio_output_path}\n')
Directorio con los audios de entrada: /home/sfandres/Documents/Git/uex-audiopy/audio/_input Directorio donde guardaremos los audios generados: /home/sfandres/Documents/Git/uex-audiopy/audio/_output
Diferencias entre formatos de archivo para almacenar audio digital.
Cargamos el archivo de audio .wav en este caso.
# Cargamos el archivo de audio.
filename = os.path.join(audio_input_path, 'sample1_stereo.wav')
# audio_data, sample_rate = librosa.load(filename, sr=None, mono=False)
sample_rate, audio_data = wavfile.read(filename)
print(f'Frecuencia de muestreo (sample rate): {sample_rate/1000} kHz')
Frecuencia de muestreo (sample rate): 44.1 kHz
Vamos a escucharlo. Para que esto se haga correctamente, hay que indicarle la frecuencia de muestreo (veremos más adelante qué es).
IPython.display.Audio(audio_data.T, rate=sample_rate) # .T se pasa únicamente si es audio estéreo.